package com.example.sprintboot.service;

import com.example.sprintboot.entity.WeChatToken;
import com.example.sprintboot.mapper.WeChatTokenMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;

/**
 * 微信Token服务类
 * 负责Token的数据库操作
 */
@Service
public class WeChatTokenService {
    
    @Resource
    private WeChatTokenMapper weChatTokenMapper;
    
    /**
     * 保存或更新Token
     * 如果该AppID已存在，则更新；否则插入新记录
     * 
     * @param appid 微信AppID
     * @param accessToken Access Token
     * @param expiresIn 过期时间（秒）
     * @return 保存的Token对象
     */
    public WeChatToken saveOrUpdateToken(String appid, String accessToken, Integer expiresIn) {
        LocalDateTime now = LocalDateTime.now();
        
        // 计算过期时间点（当前时间 + 过期秒数 - 5分钟缓冲时间，避免边界情况）
        LocalDateTime expireTime = now.plusSeconds(expiresIn - 300); // 提前5分钟过期
        
        // 查询是否已存在
        WeChatToken existingToken = weChatTokenMapper.selectByAppid(appid);
        
        if (existingToken != null) {
            // 更新已存在的记录
            existingToken.setAccessToken(accessToken);
            existingToken.setExpiresIn(expiresIn);
            existingToken.setExpireTime(expireTime);
            existingToken.setUpdateTime(now);
            weChatTokenMapper.updateByAppid(existingToken);
            return existingToken;
        } else {
            // 插入新记录
            WeChatToken newToken = new WeChatToken();
            newToken.setAppid(appid);
            newToken.setAccessToken(accessToken);
            newToken.setExpiresIn(expiresIn);
            newToken.setExpireTime(expireTime);
            newToken.setCreateTime(now);
            newToken.setUpdateTime(now);
            weChatTokenMapper.insert(newToken);
            return newToken;
        }
    }
    
    /**
     * 根据AppID获取Token
     * @param appid 微信AppID
     * @return Token对象，如果不存在返回null
     */
    public WeChatToken getTokenByAppid(String appid) {
        return weChatTokenMapper.selectByAppid(appid);
    }
    
    /**
     * 获取有效的Token（未过期）
     * @param appid 微信AppID
     * @return Token对象，如果不存在或已过期返回null
     */
    public WeChatToken getValidToken(String appid) {
        WeChatToken token = weChatTokenMapper.selectByAppid(appid);
        if (token != null && !token.isExpired()) {
            return token;
        }
        return null;
    }
    
    /**
     * 删除Token
     * @param appid 微信AppID
     */
    public void deleteToken(String appid) {
        weChatTokenMapper.deleteByAppid(appid);
    }

    public void sendMessage(String templateId) {

    }
}

